MackerelでARMベースのGraviton2搭載EC2インスタンス(M6g/C6g/R6g)を監視する
こんにちわ、札幌のヨシエです。
皆さん、最近のEC2のアップデートでGraviton2が搭載されているインスタンスが東京リージョンでも 利用することが出来るようになっていることをご存知でしょうか?
パフォーマンス、コストにおいて使いやすいインスタンスで私も少しずつ使い始めております。
詳細は以下のページをご参照ください。
今回の話題はGraviton2が搭載されているEC2インスタンスをMackerelで監視する方法を手を動かしてみたので共有します。
M5もM6gも同じように監視出来るのか?という疑問から始まった。
AmazonLinux2のインスタンスをMackerelへホスト登録をする時、Amazon Linuxにmackerel-agentをインストールするに記載されている手順や以下のような新規ホストの登録画面からmackerel-agentをインストールする方が多いと思います。
しかし、この作業手順ではインストールが出来ません、実際にm6gインスタンスを用意して試してみます。
$ uname -a Linux ip-xx-xx-xx-xx.ap-northeast-1.compute.internal 4.14.177-139.254.amzn2.aarch64 #1 SMP Thu May 7 18:50:54 UTC 2020 aarch64 aarch64 aarch64 GNU/Linux $ curl http://169.254.169.254/latest/meta-data/instance-type m6g.medium
$ curl -fsSL https://mackerel.io/file/script/amznlinux/setup-all-yum-v2.sh | MACKEREL_APIKEY='hogehoge' sh 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 failure: repodata/repomd.xml from mackerel: [Errno 256] No more mirrors to try. http://yum.mackerel.io/amznlinux/v2/2/aarch64/repodata/repomd.xml: [Errno 14] HTTP Error 403 - Forbidden + mackerel-agent init -apikey=hogehoge sh: 行 21: mackerel-agent: コマンドが見つかりません + systemctl start mackerel-agent Failed to start mackerel-agent.service: Unit not found.
対処方法
GithubリポジトリにARMベースのmackerel-agentが用意されているのでこれを配置することで監視ができるようになります。
mackerel-agentを配置する
Releases · mackerelio/mackerel-agent
こちらをインストールしていきたいと思います。
まずはEC2インスタンス上でARM64用のmackerel-agentをDLします。
$ wget https://github.com/mackerelio/mackerel-agent/releases/download/v0.68.0/mackerel-agent_linux_arm64.tar.gz
次にDLしたmackerel-agentを展開します。
$ tar xvzf mackerel-agent_linux_arm64.tar.gz mackerel-agent_linux_arm64/ mackerel-agent_linux_arm64/CHANGELOG.md mackerel-agent_linux_arm64/CREDITS mackerel-agent_linux_arm64/LICENSE mackerel-agent_linux_arm64/LICENSE.rtf mackerel-agent_linux_arm64/README.md mackerel-agent_linux_arm64/mackerel-agent mackerel-agent_linux_arm64/mackerel-agent.conf
既にmackerel-agentバイナリとmackerel-agent.confが用意されているので、それぞれのファイルを移動します。
$ sudo mv ./mackerel-agent_linux_arm64/mackerel-agent /usr/local/bin/
APIキーの登録やmackerel-agent.confを作成するためにinitオプションを実行します。
$ sudo /usr/local/bin/mackerel-agent init -apikey=hoge $ ls /etc/mackerel-agent/mackerel-agent.conf /etc/mackerel-agent/mackerel-agent.conf
ここまで実施することでmackerel-agentの作業が半分終わりです。
mackerel-agentを起動してhostIDが発行される事を確認とMackerelの画面からホスト登録されていることを確認します。
$ sudo /usr/local/bin/mackerel-agent 2020/06/27 08:04:39 INFO <main> Starting mackerel-agent version:0.68.0, re v:ea1e788, apibase:https://api.mackerelio.com 2020/06/27 08:04:39 INFO <command> no host was found for the custom identifier: i-xxxxxxxxxxxxxxxxx.ec2.amazonaws.com 2020/06/27 08:04:41 INFO <command> no host was found for the custom identifier: i-xxxxxxxxxxxxxxxxx.ec2.amazonaws.com 2020/06/27 08:04:43 INFO <command> no host was found for the custom identifier: i-xxxxxxxxxxxxxxxxx.ec2.amazonaws.com 2020/06/27 08:04:43 INFO <command> Start: apibase = https://api.mackerelio.com, hostName = ip-xx-xx-xx-xx.ap-northeast-1.compute.internal, hostID = <hostid>
mackerel-agentの自動起動設定を行う
mackerel-agent設置だけではインスタンスの起動停止時に都度手動で上げ直さなくてならないため、自動起動/停止設定を入れます。 バックグラウンドでmackerel-agentを起動、かつサーバー起動時にmackerel-agentを起動、停止時にはmackerel-agentを停止を行いたいと思います。 ※ページ最後に参考させて頂いたページを記載しております。
sudo vim /etc/systemd/system/mackerel-agent.service
[Unit] Description=mackerel-agent After=network.target network-online.target [Service] Type=simple ExecStart=/usr/local/bin/mackerel-agent ExecReload=/bin/kill -HUP $MAINPID KillMode=control-group Restart=on-failure [Install] WantedBy=multi-user.target
serviceファイルが設置出来たらsystemctlでステータスを確認します。
$ systemctl status mackerel-agent.service ● mackerel-agent.service - mackerel-agent Loaded: loaded (/etc/systemd/system/mackerel-agent.service; disabled; vendor preset: disabled) Active: inactive (dead)
上記のように確認が出来たらsystemctl enable
で自動起動を有効化、systemctl start
でプロセスを起動します。
$ sudo systemctl enable mackerel-agent.service Created symlink from /etc/systemd/system/multi-user.target.wants/mackerel-agent.service to /etc/systemd/system/mackerel-agent.service.
$ sudo systemctl start mackerel-agent.service
最後に念の為、プロセスが起動していることと自動起動が有効になっていることを確認しましょう。
$ systemctl is-active mackerel-agent.service active $ systemctl is-enabled mackerel-agent.service enabled